var eagleObj={
	 g2dHeight:20000, //鹰眼在2d中的高度
	 virtualSphereRadius:57308,  //虚拟球半径，本模型中x轴较长，则以x的长度一半为半径
	 /**
	 *功能:针对特定的eye获取在模型平面上的坐标
     *@Param pEye 观察点，包含x,y,z三个值	 
	 */
	 calCor:function(pEye){
		 //计算相对于Y的夹角
		 let xLen = pEye[0]*1;
		 let yLen = pEye[1]*1;		
		 let zLen = pEye[2]*1;
		 let floorLen=Math.sqrt(xLen*xLen+zLen*zLen);
		 let angleY=Math.atan2(yLen,floorLen);
		 let fy=Math.sin(angleY)*this.virtualSphereRadius; //虚拟球最后的高度
		 let ff=Math.cos(angleY)*this.virtualSphereRadius; //虚拟球落在平面上的长度
		 //fz需要再通过x,z的夹角计算出实际的x,z 坐标
		 ////第一参数表示正弦值,第二个参数表示余弦值
		 let angleXZ=Math.atan2(xLen, zLen);
		 let fx=ff*Math.sin(angleXZ);
		 let fz=ff*Math.cos(angleXZ);
		 
		 
		
		 if (fx>modelConfig.maxX ){
			fx= modelConfig.maxX;
		 }
		 if (fx<modelConfig.minX){
			fx= modelConfig.minX;
		 }
			
		 
		 if (fz>modelConfig.maxZ){
			fz= modelConfig.maxZ;
		 }
		 if (fz<modelConfig.minZ){
			fz= modelConfig.minZ;
		 }
		 
         return [fx,fy,fz];		 
		 //console.log("HD:"+angle+",x:"+xLen+"z:"+zLen);
		 //return angle;
	 }
};
var modelConfig={
	modelLevelName:'园区', //模型层次名，分别是 园区,building,floor
	floorNoList:[-1,1,2,3],//楼层列表
	lockFlag:false, //锁标记，避免前端操作的时候
    normalScaleArr:[1,1,1],  //普通设备正常显示大小
	scaleArr:[1.3,1.3,1.3],  //定位情况下，设备放大参数
	globalNoPostionWarnningFlagScaleArr:[2,2,2], //园区告警标记放大倍数
	flyRationGlobal:0.05, //定位时候-表示眼睛跟中心的距离动态计算，适用于全局模型,远大越近(摄像头)
	flyRationGlobalOther:0.03, //全局的其它设备
	flyRationNormal:0.01, //定位时候-表示眼睛跟中心的距离动态计算，适用于2,3层级模型
    flyDirectionNormal:[5,5,5],
    flyDirectionGlobal:[1,1,1],	
	maxX:26775,
	minX:-30535,
	maxZ:16667.93803,
	minZ:-12943,
	counter:0,
	modelId:'',
	xView:0,
	yView:0,
	zView:0,
	xCenter:0,
	yCenter:0,
	zCenter:0,
	setting:null, //已经包含了以上的内容
	setConfig:function(data,modelId){		
		this.modelId=modelId;
		this.setting=data[0];
		if(data.xview && data.yview && data.zview) {			
			this.xView=data.xview;
			this.yView=data.yview;
			this.zView=data.zview;
		}
		if (data.xg3dcenter){
			this.xCenter=data.xg3dcenter;
		}
		if (data.yg3dcenter){
			this.yCenter=data.yg3dcenter;
		}
		if (data.zg3dcenter){
			this.zCenter=data.zg3dcenter;
		}
		
		if (data.far){
			this.far=data.far;
		}
		if (data.near){
			this.near=data.near;
		}
		this.counter=1;
	},
	oldInteractors:null //老的交互器，可以移动的。
};
var modelMap={
   //本对象用于存储模型名称和模型层次的映射
   //1.凡是在building数组中的，都是位于model-logic.map中的building
   //2.凡是在floor数组中的，都是位于model-logic.map中的floor
   //3. 其它的被认为是园区
   //无论是单层和多层建筑，在building和floor数组中都必须有对应值
   // 数组中的值对应于scenes目录下的json文件名
   curModelFileName:'园区',
   curModelId:'JG001',//当前模型ID
   curModelIdPrefix:'',//当前模型ID前缀
   curShowingFloorName:'',//当前显示的楼层名称
   modelLoadStatus:'',//模型加载状态，可以取 loading,finished,分别表示长在加载，以及完成
   globalModelId:'JG001', //全景模型的模型编号
   lastClickObjecId:0 ,   //最后点击的模型对象id，用于恢复原始大小!
   lastHighLightDeviceTypeName:'', //最近高亮的设备名称
   /**
   *获取当前模型id的前缀,例如A1_0获得A1
   **/   
   getModelIdPrefix:function(modelId){
	   return modelId.slice(0,modelId.indexOf('_'));
   },
   /**
   *本函数，在setEye出现问题之后，可以纠正问题。但目前暂时没有用
   *@param eventKind ht的事件代码
   *@deprecated 
   */
   resetModel:function(eventKind){
			//检测右键拖动
			console.log(eventKind);
			let panFlag=eventKind.search("Pan")*1;
			if (panFlag!=-1){
				let eyeX=g3d.getEye()[0];
				if (eyeX.search("-")>-1){
					console.log("模型角度纠正!");
				}
			}
		},	 
   /**
   *@功能：指定设备可以交互
   *@注意：当指定可以interactive=true之后，设备的on事件可以被激活
   * 不同模型下，需要被激活的有所不同.
   * 本方法主要针对透明框的.楼层模型没有透明框，不需要处理
   */
   setObjectInteractive:function(){	   
      if (modelConfig.modelLevelName=='园区'){
		  this.globalBuildingTagIdList.forEach(function(buildingTag){
			  let buildNode=g3d.dm().getDataByTag(buildingTag);
			  if (buildNode!=undefined){
				  buildNode.s('interactive',true);
			  }
		  });
	  }
	  else if (modelConfig.modelLevelName=='building'){
		  for (x in modelConfig.floorNoList){
			let floorModelId=this.curModelIdPrefix+"_"+modelConfig.floorNoList[x];			
			let floorNode=g3d.dm().getDataByTag(floorModelId);
			if (floorNode!=undefined){
				floorNode.s('interactive',true);
			}
		}
	  }
   },	   
   //映射模型层级   
   match:function(fileName){
	   if (fileName=='园区'){
		   return '园区';
	   }
	   else{
		   for (x in this.buildingFileName){
			   if (this.buildingFileName[x]==fileName){
				   return 'building';
			   }
		   }
		   for (x in this.floorFileName){
			   if (this.floorFileName[x]==fileName){
				   return 'floor';
			   }
		   }
		   return '园区';
		   
	   }
   },
   /**
   *@author :luzhifei 
   *@created： 2019/09/10
   *@功能：通过模型id获取对应于全景模型中的tag标记
   *例如 F11_1,则应该返回F11.如果模型id是全景模型ID，则返回全景模型ID
   *@param  modelId 模型编号
   */
   getBuildTagIdByModelId:function(modelId){
	 if (modelId==this.globalModelId){
		 return modelId;
     }
	 else{
        //返回下划线之前的内容
		let underscoreIndex=modelId.indexOf('_');
		if  (underscoreIndex==-1){
			return null;
		}
		else{
			return modelId.slice(0,underscoreIndex);
		}	
	 }
   },   
   getTopModelId:function(fileName){
	   let modelId=fileName.slice(1,3);
	   if (!isNaN(modelId) && parseFloat(modelId).toString() != 'NaN'){
		   return fileName.slice(0,3);
	   }
	   else{
		   return fileName.slice(0,2);
	   }
   },
   //判断是否单层楼层
   isSingleFloor:function(fileName){
	   if (fileName=='园区'){
		   return true;
	   }
	   else{
		   for (x in this.multiFloorFileName){
			   if (this.multiFloorFileName[x]==fileName){
				   return false;
			   }
		   }
		   return true;
	   }
   },
   isMultiFloor:function(modelId){
	   for (x in this.multiFloorModelId){
		   if (this.multiFloorModelId[x]==modelId){
			   return true;
		   }
	   }
	   return false;

   },
   //获取上级模型名称
   getParentModelName:function(fileName){
	   for (x in this.buildingFileName){
		   if (fileName.indexOf(this.buildingFileName[x])!=-1){
			   return this.buildingFileName[x];
		   }
	   }
	   return "";
   },
   //判断是否点击设备
   isClickDevice:function(nodeDisPlayName){
	   let isDevice=false;
	   for(x in vm.rightcontentdata){
			if (vm.rightcontentdata[x].name == nodeDisPlayName) {
				isDevice=true;
				break;
			}
	   }
	   return isDevice;
   },
   /**
   *@功能：判断是否建筑tag
   *@param modelTagName 模型tag名称
   *@return 如果双击的是指定 大楼tag，则返回true,否则返回false
   */   
   isBuildingTag:function(modelTagName){
	   return this.globalBuildingTagIdList.indexOf(modelTagName)!=-1;
   },
   /**
   *@功能：判断是楼层标记
   *@param modelTagName 模型tag名称
   *@return 如果双击的是指定 楼层tag，则返回true,否则返回false
   */   
   isFloorTag:function(modelTagName){	   
	   return this.floorHeight[modelTagName]!=undefined;
   },
   //全景（园区ht tag 列表)
   globalBuildingTagIdList:[
    'A1',
	'A2',
	'A3',
	'A4',
	'A5',
	'A6',
	'B1',
	'B2',
	'B3',
	'B4',
	'C1',
	'C2',
	'C3',
	'C4',
	'D1',
	'D2',
	'D3',
	'D4',
	'D5',
	'D6',
	'E1',
	'E2',
	'F1',
	'F2',
	'F3',
	'F4',
	'F6',
	'F7',
	'F9',
	'F11',
	'F12',
	'F13'
   ],
   globalBuildingNameList:{
	    'A1':'A1教学用房',
		'A2':'A2教学用房',
		'A3':'A3教学用房',
		'A4':'A4执勤楼',
		'A5':'A5多功能厅',
		'A6':'A6技能培训教室',
		'B1':'B1教学用房',
		'B2':'B2教学用房',
		'B3':'B3教学用房',
		'B4':'B4执勤楼',
		'C1':'C1教学用房',
		'C2':'C2教学用房',
		'C3':'C3教学用房',
		'C4':'C4执勤楼',
		'D1':'D1教学用房',
		'D2':'D2教学用房',
		'D3':'D3教学用房',
		'D4':'D4执勤楼',
		'D5':'D5多功能厅',
		'D6':'D6技能培训教室',
		'E1':'E1教学区大门',
		'E2':'E2卫生楼',
		'F11':'F11变配电室',
		'F12':'F12锅炉',
		'F13':'F13变配电室',
		'F1':'F1大门及警务室',
		'F2':'F2行政楼',
		'F3':'F3车库',
		'F4':'F4食堂加工',
		'F6':'F6备勤楼',
		'F7':'F7备勤楼',
		'F9':'F9干警食堂'
   },
   whole:['园区'],
   buildingFileName:[
	'A1教学用房',
	'A2教学用房',
	'A3教学用房',
	'A4执勤楼',
	'A5多功能厅',
	'A6技能培训教室',
	'B1教学用房',
	'B2教学用房',
	'B3教学用房',
	'B4执勤楼',
	'C1教学用房',
	'C2教学用房',
	'C3教学用房',
	'C4执勤楼',
	'D1教学用房',
	'D2教学用房',
	'D3教学用房',
	'D4执勤楼',
	'D5多功能厅',
	'D6技能培训教室',
	'E1教学区大门',
	'E2卫生楼',
	'F11变配电室',
	'F12锅炉',
	'F13变配电室',
	'F1大门及警务室',
	'F2行政楼',
	'F3车库',
	'F4食堂加工',
	'F6备勤楼',
	'F7备勤楼',
	'F9干警食堂'],
   floorFileName:[
    'A1教学用房1层',
	'A2教学用房1层',
	'A3教学用房1层',
	'A4执勤楼1层',
	'A4执勤楼2层',
	'A5多功能厅1层',
	'A6技能培训教室1层',
	'B1教学用房1层',
	'B2教学用房1层',
	'B3教学用房1层',
	'B4执勤楼1层',
	'B4执勤楼2层',
	'C1教学用房1层',
	'C2教学用房1层',
	'C3教学用房1层',
	'C4执勤楼1层',
	'C4执勤楼2层',
	'D1教学用房1层',
	'D2教学用房1层',
	'D3教学用房1层',
	'D4执勤楼1层',
	'D4执勤楼2层',
	'D5多功能厅1层',
	'D6技能培训教室1层',
	'E1教学区大门1层',
	'E1教学区大门2层',
	'E2卫生楼1层',
	'E2卫生楼2层',
	'F11变配电室1层',
	'F12锅炉1层',
	'F13变配电室1层',
	'F1大门及警务室1层',
	'F1大门及警务室2层',
	'F1大门及警务室3层',
	'F2行政楼1层',
	'F2行政楼2层',
	'F2行政楼3层',
	'F3车库1层',
	'F4食堂加工1层',
	'F6备勤楼1层',
	'F6备勤楼2层',
	'F6备勤楼3层',
	'F7备勤楼1层',
	'F7备勤楼2层',
	'F7备勤楼3层',
	'F9干警食堂1层',
	'F9干警食堂负1层'
	],
	//多层楼层列表
	multiFloorModelId:[
	  'F1_1',
	  'F1_2',
	  'F1_3',
	  'F2_1',
	  'F2_2',
	  'F2_3',
	  'A4_1',
	  'A4_2',
	  'B4_1',
	  'B4_2',
	  'C4_1',
	  'C4_2',
	  'D4_1',
	  'D4_2',
	  'E1_1',
	  'E1_2',
	  'E2_1',
	  'E2_2',
	  'F6_1',
	  'F6_2',
	  'F6_3',
	  'F7_1',
	  'F7_2',
	  'F7_3',
	  'F9_1',
	  'F9_-1'
	],
	multiFloorFileName:[
	'A4执勤楼1层',
	'A4执勤楼2层',
	'B4执勤楼1层',
	'B4执勤楼2层',
	'C4执勤楼1层',
	'C4执勤楼2层',	
	'D4执勤楼1层',
	'D4执勤楼2层',	
	'E1教学区大门1层',
	'E1教学区大门2层',
	'E2卫生楼1层',
	'E2卫生楼2层',	
	'F1大门及警务室1层',
	'F1大门及警务室2层',
	'F1大门及警务室3层',
	'F2行政楼1层',
	'F2行政楼2层',
	'F2行政楼3层',	
	'F6备勤楼1层',
	'F6备勤楼2层',
	'F6备勤楼3层',
	'F7备勤楼1层',
	'F7备勤楼2层',
	'F7备勤楼3层',
	'F9干警食堂1层',
	'F9干警食堂负1层'],
	//模型名称和模型ID的映射
	//累计园区一个，建筑32，楼层47,
	//多层建筑：11个，多层建筑楼层 26 层
	//单层建筑：21个，单层建筑楼层 21 层
	modelFileNameMappingModelId:{
	'园区':'JG001',
	'A1教学用房':'A1_0',
	'A2教学用房':'A2_0',
	'A3教学用房':'A3_0',
	'A4执勤楼':'A4_0',
	'A5多功能厅':'A5_0',
	'A6技能培训教室':'A6_0',
	'B1教学用房':'B1_0',
	'B2教学用房':'B2_0',
	'B3教学用房':'B3_0',
	'B4执勤楼':'B4_0',
	'C1教学用房':'C1_0',
	'C2教学用房':'C2_0',
	'C3教学用房':'C3_0',
	'C4执勤楼':'C4_0',
	'D1教学用房':'D1_0',
	'D2教学用房':'D2_0',
	'D3教学用房':'D3_0',
	'D4执勤楼':'D4_0',
	'D5多功能厅':'D5_0',
	'D6技能培训教室':'D6_0',
	'E1教学区大门':'E1_0',
	'E2卫生楼':'E2_0',
	'F11变配电室':'F11_0',
	'F12锅炉':'F12_0',
	'F13变配电室':'F13_0',
	'F1大门及警务室':'F1_0',
	'F2行政楼':'F2_0',
	'F3车库':'F3_0',
	'F4食堂加工':'F4_0',
	'F6备勤楼':'F6_0',
	'F7备勤楼':'F7_0',
	'F9干警食堂':'F9_0',
	//下面是楼层
	'A1教学用房1层':'A1_1',
	'A2教学用房1层':'A2_1',
	'A3教学用房1层':'A3_1',
	'A4执勤楼1层':'A4_1',
	'A4执勤楼2层':'A4_2',
	'A5多功能厅1层':'A5_1',
	'A6技能培训教室1层':'A6_1',
	'B1教学用房1层':'B1_1',
	'B2教学用房1层':'B2_1',
	'B3教学用房1层':'B3_1',
	'B4执勤楼1层':'B4_1',
	'B4执勤楼2层':'B4_2',
	'C1教学用房1层':'C1_1',
	'C2教学用房1层':'C2_1',
	'C3教学用房1层':'C3_1',
	'C4执勤楼1层':'C4_1',
	'C4执勤楼2层':'C4_2',
	'D1教学用房1层':'D1_1',
	'D2教学用房1层':'D2_1',
	'D3教学用房1层':'D3_1',
	'D4执勤楼1层':'D4_1',
	'D4执勤楼2层':'D4_2',
	'D5多功能厅1层':'D5_1',
	'D6技能培训教室1层':'D6_1',
	'E1教学区大门1层':'E1_1',
	'E1教学区大门2层':'E1_2',
	'E2卫生楼1层':'E2_1',
	'E2卫生楼2层':'E2_2',
	'F11变配电室1层':'F11_1',
	'F12锅炉1层':'F12_1',
	'F13变配电室1层':'F13_1',
	'F1大门及警务室1层':'F1_1',
	'F1大门及警务室2层':'F1_2',
	'F1大门及警务室3层':'F1_3',
	'F2行政楼1层':'F2_1',
	'F2行政楼2层':'F2_2',
	'F2行政楼3层':'F2_3',
	'F3车库1层':'F3_1',
	'F4食堂加工1层':'F4_1',
	'F6备勤楼1层':'F6_1',
	'F6备勤楼2层':'F6_2',
	'F6备勤楼3层':'F6_3',
	'F7备勤楼1层':'F7_1',
	'F7备勤楼2层':'F7_2',
	'F7备勤楼3层':'F7_3',
	'F9干警食堂1层':'F9_1',
	'F9干警食堂负1层':'F9_-1'
	},
	/**
	*@created 2019-09-20
	*@author luzhifei 
	*@功能：通过模型id获取模型名称
	*@param modelId 模型ID 
	*@return 成功则返回特定的模型文件名称(如果名称没有正确设置也可能是null,undefined)，找不到则返回null
	*/
	getModelNameByModelId:function(modelId){
		for(modelName in this.modelFileNameMappingModelId){
			if (this.modelFileNameMappingModelId[modelName]==modelId){
				return modelName;
			}
		}
		return null;
	},
   //楼高,没有设置则默认为20 
   //目前主要用于电子巡更中，确定控制点的高度
   //累计 47个楼层
   // floorHeight 本身也可以当作所有楼层模型ID列表使用
   floorHeight:{
	   'A1_1':50,
	   'A2_1':50,
	   'A3_1':50,
	   'B1_1':50,
	   'B2_1':50,
	   'B3_1':50,
	   'C1_1':50,
	   'C2_1':50,
	   'C3_1':50,
	   'D1_1':50,
	   'D2_1':50,
	   'D3_1':50,
	   'A4_1':50,
	   'A4_2':980,
	   'B4_1':50,
	   'B4_2':980,	   
	   'C4_1':50,
	   'C4_2':980,
	   'D4_1':50,
	   'D4_2':980,
	   'E1_2':320,
	   'E1_1':50,
	   'E2_2':340,
	   'E2_1':50,
	   'F1_3':470,
	   'F1_2':180,
	   'F1_1':50,
	   'F2_3':620,
	   'F2_2':340,
	   'F2_1':30,
	   'F3_1':50,
	   'F4_1':50,	   
	   'F11_1':50,
	   'F12_1':50,
	   'F13_1':50,
	   'A5_1':40,
	   'A6_1':40,
	   'D5_1':40,
	   'D6_1':40,
	   'F6_3':590,
	   'F6_2':295,
	   'F6_1':50,
	   'F7_3':590,
	   'F7_2':295,
	   'F7_1':50,
	   'F9_1':340,
	   'F9_-1':40
   },
   /**
   *@created 20190920
   *@author luzhifei
   *@功能： 获取楼层的地面高度(非精确）
   *@param modelId 模型ID
   *@defValue 默认值(数值类型)
   */
   getFloorHeight:function(modelId,defValue){
	   let modelHeight=this.floorHeight[modelId];
	   if (modelHeight==null || modelHeight==undefined){
		   return defValue;
	   }
	   else{
		   return modelHeight;
	   }
   }
};